package com.wofish.member.service;

import com.wofish.member.enums.AdvanceTypeEnum;
import com.wofish.member.domain.Member;
import com.wofish.member.enums.PointTypeEnum;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 会员 服务层
 * 
 * @author wofish
 * @date 2019-04-21
 */
public interface IMemberService {
	/**
     * 查询会员信息
     * 
     * @param memberId 会员ID
     * @return 会员信息
     */
	public Member selectMemberById(Long memberId);
	
	/**
     * 查询会员列表
     * 
     * @param member 会员信息
     * @return 会员集合
     */
	public List<Member> selectMemberList(Member member);
	
	/**
     * 新增会员
     * 
     * @param member 会员信息
     * @return 结果
     */
	public int insertMember(Member member);
	
	/**
     * 修改会员
     * 
     * @param member 会员信息
     * @return 结果
     */
	public int updateMember(Member member);
		
	/**
     * 删除会员信息
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
	public int deleteMemberByIds(String ids);

	/**
	 * 添加会员余额
	 * @param memberId
	 * @param val
	 * @param reason
	 * @return
	 */
	int addMemberAdvance(Long memberId, BigDecimal val, String reason, AdvanceTypeEnum type);

	/**
	 * 使用积分
	 *
	 * 使用时，先使用最先过期的积分
	 * @param memberId
	 * @param orderId
	 * @param point: 积分值大于0
	 * @return
	 */
	boolean usePoint(Long memberId, Long orderId, Integer point, PointTypeEnum type, String reason);

	/**
	 * 添加积分
	 * @param memberId
	 * @param orderId
	 * @param point: 积分值大于0
	 * @return
	 */
	boolean addPoint(Long memberId, Long orderId, Integer point, PointTypeEnum type, String reason);

	/**
	 * 更新过期的积分
	 * @param memberId
	 * @param date
	 * @return
	 */
	 int updateExpirePoint(Long memberId, Date date);

	/**
	 * 添加会员积分
	 *
	 * @param memberId
	 * @param newVal： 可正可负
	 * @param reason
	 * @param admin
	 * @return
	 */
	boolean addMemberPoint(Long memberId, Integer newVal, String reason, PointTypeEnum admin);
}
